package com.ruyuan.eshop.common.service.trade.cart.impl;

import com.ruyuan.eshop.common.model.goods.vo.SpecValueVO;
import com.ruyuan.eshop.common.model.trade.cart.enums.CheckedWay;
import com.ruyuan.eshop.common.model.trade.cart.vo.CartSkuOriginVo;
import com.ruyuan.eshop.common.service.trade.cart.CartOriginDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 购物车原始数据业务类实现
 */
@Service
public class CartOriginDataServiceImpl implements CartOriginDataService {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 由缓存中读取数据
     *
     * @param checkedWay 表明调用该方法是CART,BUY_NOW还是TRADE,确定调用不同的购物缓存数据
     * @return 列表
     */
    @Override
    public List<CartSkuOriginVo> read(CheckedWay checkedWay) {
        // 模拟数据 FIXME
        List<CartSkuOriginVo> list = new ArrayList<>();
        list.add(add(null, 1, null, null));
        return list;
    }

    /**
     * 向缓存中写入数据
     *
     * @param skuId         要写入的skuid
     * @param num           要加入购物车的数量
     * @param activityId    要参加的活动
     * @param promotionType 要参加的活动类型
     * @return 购物车原始数据
     */
    @Override
    public CartSkuOriginVo add(Long skuId, int num, Long activityId, String promotionType) {

        // 持久化存储购物车数据 TODO


        // 模拟一个商品数据返回 FIXME
        CartSkuOriginVo sku = new CartSkuOriginVo();
        sku.setSkuId(1417746396428079105L);
        sku.setGoodsId(1417677439226580994L);
        sku.setGoodsName("鸿蒙手机");
        sku.setSn("hm-01-000001");
        sku.setQuantity(196);
        sku.setEnableQuantity(180);
        sku.setPrice(6550.00);
        sku.setSpecs("[{\"spec_id\":1,\"spec_value\":\"黄色\",\"seller_id\":null,\"spec_name\":\"颜色\",\"sku_id\":null,\"big\":null,\"small\":null,\"thumbnail\":null,\"tiny\":null,\"spec_type\":0,\"spec_image\":\"\",\"spec_value_id\":188},{\"spec_id\":1417744751111671809,\"spec_value\":\"8+128\",\"seller_id\":null,\"spec_name\":\"存储容量\",\"sku_id\":null,\"big\":null,\"small\":null,\"thumbnail\":null,\"tiny\":null,\"spec_type\":0,\"spec_image\":\"\",\"spec_value_id\":1417744797169324033}]");
        sku.setCost(6450.00);
        sku.setWeight(1.0);
        sku.setSellerId(1L);
        sku.setSellerName("儒猿技术窝");
        sku.setCategoryId(497L);
        sku.setThumbnail("http://javashop-01.oss-cn-shanghai.aliyuncs.com/javashop/goods/BEF25E136AE049D481770A703340D286.jpeg_300x300");
        sku.setHashCode(100924403);
        sku.setTemplateId(0L);
        List<SpecValueVO> specList = getSpecList();
        sku.setSpecList(specList);
        sku.setGoodsTransfeeCharge(1);
        sku.setDisabled(1);
        sku.setMarketEnable(1);
        sku.setGoodsType("NORMAL");
        sku.setLastModify(1627312179L);
        sku.setScripts(null);
        sku.setScripts(null);
        sku.setNum(1);
        sku.setChecked(1);
        sku.setSingleList(null);
        sku.setGroupList(null);
        return sku;
    }

    private List<SpecValueVO> getSpecList() {
        List<SpecValueVO> specList = new ArrayList<>();
        SpecValueVO specValueVO1 = new SpecValueVO();
        specValueVO1.setSellerId(1L);
        specValueVO1.setSpecValue("黄色");
        specValueVO1.setSellerId(null);
        specValueVO1.setSpecName("颜色");
        specValueVO1.setSkuId(null);
        specValueVO1.setSpecValueId(188L);
        specList.add(specValueVO1);


        SpecValueVO specValueVO2 = new SpecValueVO();
        specValueVO2.setSpecId(1417744751111671809L);
        specValueVO2.setSellerId(null);
        specValueVO2.setSpecValue("8+128");
        specValueVO2.setSellerId(null);
        specValueVO2.setSpecName("存储容量");
        specValueVO2.setSkuId(null);
        specValueVO2.setSpecValueId(1417744797169324033L);
        specList.add(specValueVO2);

        return specList;
    }

    /**
     * 向缓存中写入数据
     *
     * @param skuId      要写入的skuid
     * @param num        要加入购物车的数量
     * @param activityId 要参加的活动
     * @return 购物车原始数据
     */
    @Override
    public CartSkuOriginVo addBuyNow(Long skuId, int num, Long activityId, String promotionType) {
        // TODO
        return add(skuId, num, activityId, promotionType);
    }

    /**
     * 立即购买
     *
     * @param skuId         商品skuid
     * @param num           购买数量
     * @param activityId    活动id
     * @param promotionType 活动类型
     */
    @Override
    public void buy(Long skuId, Integer num, Long activityId, String promotionType) {
        // TODO
    }

    /**
     * 更新数量
     *
     * @param skuId 要更新的sku id
     * @param num   要更新的数量
     */
    @Override
    public CartSkuOriginVo updateNum(Long skuId, int num) {

        // TODO

        return add(skuId, num, null, null);

    }

    /**
     * 更新选中状态
     *
     * @param skuId   要更新的sku id
     * @param checked 选中状态 1选中 0未选中
     * @return 购物车原始数据
     */
    @Override
    public CartSkuOriginVo checked(long skuId, int checked) {
        // TODO

        return add(skuId, 1, null, null);
    }

    /**
     * 更新某个店铺的所有商品的选中状态
     *
     * @param sellerId 商家id
     * @param checked  选中状态 1选中 0未选中
     */
    @Override
    public void checkedSeller(long sellerId, int checked) {
        // TODO

    }

    /**
     * 更新全部的选中状态
     *
     * @param checked 选中状态 1选中 0未选中
     * @param way     更新源，BUY_NOW,立即购买,CART,购物车
     */
    @Override
    public void checkedAll(int checked, CheckedWay way) {
        // TODO

    }

    /**
     * 批量删除
     *
     * @param skuIds skuid数组
     * @param way    删除源，BUY_NOW,立即购买,CART,购物车
     */
    @Override
    public void delete(Long[] skuIds, CheckedWay way) {
        // TODO

    }

    /**
     * 清空购物车
     */
    @Override
    public void clean() {
        // TODO
    }

    /**
     * 清除掉已经选中的商品
     *
     * @param way 清除缓存源，BUY_BOW,立即购买，CART,购物车
     */
    @Override
    public void cleanChecked(CheckedWay way) {
        // TODO

    }

}
